package com.fzn.spring5.testdemo;

import com.fzn.spring5.Book;
import com.fzn.spring5.Orders;
import com.fzn.spring5.User;
import org.junit.jupiter.api.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * @author fzn
 * @date 2022/2/19
 * @apiNote
 */
public class Spring5Test {
    /**
     * spring的快速入门
     *      BeanFactory: IOC容器基本实现 是Spring内部的使用的接口不提供开发人员使用
     *                      加载配置文件时候不会创建 在获取对象的时候使用的时候才会去创建对象
     *      ApplicationContext：BeanFactory接口的子接口 提供更多强大的功能 一般是开发者使用
     *                      加载配置文件时候就会把在配置文件对象进行创建
     */
    @Test
    public void testAdd(){
       // 1.加载spring的配置文件
        ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
       // BeanFactory context = new ClassPathXmlApplicationContext("bean1.xml");
        // 2.获取配置创建对象
        User user = context.getBean("user", User.class);
        System.out.println(user);
        user.add();
    }

    /**
     * 通过set方式注入属性
     */
    @Test
    public void testBook(){
        // 1.加载spring的配置文件
        ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
        // BeanFactory context = new ClassPathXmlApplicationContext("bean1.xml");
        // 2.获取配置创建对象
        Book book = context.getBean("book", Book.class);
        System.out.println(book);
        book.testDemo();
    }

    /**
     * 通过有参构造器注入属性
     */
    @Test
    public void testOrders(){
        // 1.加载spring的配置文件
        ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
        // BeanFactory context = new ClassPathXmlApplicationContext("bean1.xml");
        // 2.获取配置创建对象
        Orders orders = context.getBean("orders", Orders.class);
        System.out.println(orders);
        orders.ordersTest();
    }

    /**
     * 使用p名称空间注入属性
     * xmlns:p="http://www.springframework.org/schema/p"
     */
    @Test
    public void testBook1(){
        // 1.加载spring的配置文件
        ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
        // BeanFactory context = new ClassPathXmlApplicationContext("bean1.xml");
        // 2.获取配置创建对象
        Book book = context.getBean("book1", Book.class);
        System.out.println(book);
        book.testDemo();
    }

}
